import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

// 用户账号密码信息存储类
public class UserAccountArray {
    // 用哈希表来存储学生用户账户和密码数据
    HashMap<String, String> studentAccountArray = new HashMap<>();

    // 用哈希表来存储老师用户账户和密码数据
    HashMap<String, String> teacherAccountArray = new HashMap<>();

    // 用哈希表来存储管理员用户账户和密码数据
    HashMap<String, String> managerAccountArray = new HashMap<>();

    // 添加学生账户和密码
    public void studentAccountArrayAdd(String account, String pwd) {
        studentAccountArray.put(account, pwd);
    }

    // 添加老师账户和密码
    public void teacherAccountArrayAdd(String account, String pwd) {
        teacherAccountArray.put(account, pwd);
    }

    // 添加管理员账户和密码
    public void managerAccountArrayAdd(String account, String pwd) {
        managerAccountArray.put(account, pwd);
    }

    // 初始化用户账号密码信息
    public void UserAccountArrayInit()
    {
        String studentAccountArray = "src/studentAccountArray";
        String teacherAccountArray = "src/teacherAccountArray";
        String managerAccountArray = "src/managerAccountArray";
        studentAccountArrayInit(studentAccountArray);
        teacherAccountArrayInit(teacherAccountArray);
        managerAccountArrayInit(managerAccountArray);
    }

    //从文件初始化账号密码库，未进行异常处理
    public void studentAccountArrayInit(String filename) {
        // 指定文件路径
        try {
            // 读取文件内容到字符串列表
            List<String> lines = Files.readAllLines(Paths.get(filename), StandardCharsets.UTF_8);

            // 遍历字符串列表并输出每一行
            for (String line : lines) {
                // 使用空格分隔每行数据
                String[] split = line.split("\\s+");
                if (split.length >= 2) {
                    String key = split[0];
                    String value = split[1];
                    // 其他操作
                } else {
                    // 处理不符合格式的行
                    continue;
                }
                studentAccountArray.put(split[0],split[1]);
            }
        } catch (IOException e) {
            // 处理异常

        }
    }

    public void teacherAccountArrayInit(String filename) {
        // 指定文件路径
        try {
            // 读取文件内容到字符串列表
            List<String> lines = Files.readAllLines(Paths.get(filename), StandardCharsets.UTF_8);

            // 遍历字符串列表并输出每一行
            for (String line : lines) {
                // 使用空格分隔每行数据
                String[] split = line.split("\\s+");
                if (split.length >= 2) {
                    String key = split[0];
                    String value = split[1];
                    // 其他操作
                } else {
                    // 处理不符合格式的行
                    continue;
                }
                studentAccountArray.put(split[0],split[1]);
            }
        } catch (IOException e) {
            // 处理异常

        }
    }

    public void managerAccountArrayInit(String filename) {
        // 指定文件路径
        try {
            // 读取文件内容到字符串列表
            List<String> lines = Files.readAllLines(Paths.get(filename), StandardCharsets.UTF_8);

            // 遍历字符串列表并输出每一行
            for (String line : lines) {
                // 使用空格分隔每行数据
                String[] split = line.split("\\s+");
                if (split.length >= 2) {
                    String key = split[0];
                    String value = split[1];
                    // 其他操作
                } else {
                    // 处理不符合格式的行
                    continue;
                }
                studentAccountArray.put(split[0],split[1]);
            }
        } catch (IOException e) {
            // 处理异常

        }
    }

    // 检查学生账户和密码
    public int studentAccountArrayCheck(String account, String pwd) {
        if (studentAccountArray.containsKey(account)) {
            if (studentAccountArray.get(account).equals(pwd)) {
                return 0; // 认证成功
            } else {
                return 1; // 密码错误
            }
        } else {
            return 2; // 账户不存在
        }
    }

    // 显示学生账户信息
    public void studentAccountArrayShow() {
        for (String key : studentAccountArray.keySet()) {
            String value = studentAccountArray.get(key);
            System.out.println(key + " ：" + value);
        }
    }

    // 检查老师账户和密码
    public int teacherAccountArrayCheck(String account, String pwd) {
        if (teacherAccountArray.containsKey(account)) {
            if (teacherAccountArray.get(account).equals(pwd)) {
                return 0; // 认证成功
            } else {
                return 1; // 密码错误
            }
        } else {
            return 2; // 账户不存在
        }
    }

    // 显示老师账户信息
    public void teacherAccountArrayShow() {
        for (String key : teacherAccountArray.keySet()) {
            String value = teacherAccountArray.get(key);
            System.out.println(key + " ：" + value);
        }
    }

    // 检查管理员账户和密码
    public int managerAccountArrayCheck(String account, String pwd) {
        if (managerAccountArray.containsKey(account)) {
            if (managerAccountArray.get(account).equals(pwd)) {
                return 0; // 认证成功
            } else {
                return 1; // 密码错误
            }
        } else {
            return 2; // 账户不存在
        }
    }

    // 显示管理员账户信息
    public void managerAccountArrayShow() {
        for (String key : managerAccountArray.keySet()) {
            String value = managerAccountArray.get(key);
            System.out.println(key + " ：" + value);
        }
    }

    public void accountArrayUpdate(String filePath, HashMap<String, String> AccountArray) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            // 遍历HashMap并将键值对写入文件
            for (Map.Entry<String, String> entry : AccountArray.entrySet()) {
                writer.write(entry.getKey() + " " + entry.getValue());
                writer.newLine();  // 换行
            }
//            System.out.println("HashMap contents have been written to the file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void accountArrayUpdateAll()
    {
        String teacherAccountArrayFile = "src/teacherAccountArray";
        String studentAccountArrayFile = "src/studentAccountArray";
        String managerAccountArrayFile = "src/managerAccountArray";

        accountArrayUpdate(studentAccountArrayFile,studentAccountArray);
        accountArrayUpdate(teacherAccountArrayFile,teacherAccountArray);
        accountArrayUpdate(managerAccountArrayFile,managerAccountArray);
    }


}
